﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using CondorTravelOperacionesWeb.Source;
using condortravel.operaciones.business.operaciones;
using condortravel.operaciones.core.DataModel;
using condortravel.operaciones.common;
using condortravel.operaciones.core.Events;

namespace CondorTravelOperacionesWeb.Pages.Controles
{
    public partial class UCEvento : ControlBase
    {
        #region Eventos de controles
        public override event ControlBase.EventOnErrorControl ErrorControl;

        public override event ControlBase.EventOnMessageControl MessageControl;

        public delegate void EventoUpdate_Click(object sender, ProgramacionEventArgs e);
        public virtual event EventoUpdate_Click UpdateEvento_Click;

        #endregion

        #region Propiedades
        private bool isnewEvent;

        public bool IsnewEvent
        {
            get { return isnewEvent; }
            set { isnewEvent = value; }
        }
        
        public long CodigoEvento
        {
            get
            {
                return (txtCodigoEvento.Text.Trim().Equals(String.Empty) ? 0 : long.Parse(txtCodigoEvento.Text.Trim()));                
             }
            set { txtCodigoEvento.Text = value.ToString(); }
        }

        public long CodigoProgramacion
        {
            get { return hfCodigoProgramacion.Value.Equals(String.Empty) ? 0 : long.Parse(hfCodigoProgramacion.Value); }
            set { hfCodigoProgramacion.Value = value.ToString(); }
        }

        #endregion

        #region Business Objects
        private OperacionesServices operacionesServices;

        public OperacionesServices OperacionesServices
        {
            set { operacionesServices = value; }
        }
        #endregion
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                cargarDatosIniciales();
            }
        }
        #region Metodos publicos
        /// <summary>
        /// 
        /// </summary>
        private void cargarDatosIniciales()
        {
            
            Util.LoadDropDownList(cboAgencia, Estaticas.getListAgencia(), "descripcion", "Agencia_ID", true, "0", "-");
            Util.LoadDropDownList(cboAgente, Estaticas.getListAgente(), "nombre", "Agente_ID", true, "0", "-");
            Util.LoadDropDownList(cboEstado, Estaticas.getListEstadoEvento(), "descripcion", "estadoEvento_ID", true, "0", "-");

            txtFechaEvento.Text = DateTime.Now.ToShortDateString();
            txtHoraEvento.Text = DateTime.Now.ToShortTimeString();

        }

        public void mostrarEvento()
        {
            Tb_Evento evento=operacionesServices.getEventoByCodigo(this.CodigoEvento);
            txtCodigoEvento.Text = evento.evento_ID.ToString();
            txtFechaEvento.Text = evento.fechaEvento.ToShortDateString();
            txtHoraEvento.Text = evento.hora;
            txtItinerario.Text = evento.Tb_ServiciosProgramado.Tb_ItinerarioViajero.descripcion;
            txtObservacion.Text = evento.observacion;
            txtProgramacion.Text = evento.Tb_ServiciosProgramado.descripcion;
            Util.SelectItemDropDownList(cboAgencia, evento.agencia_ID.ToString());
            Util.SelectItemDropDownList(cboAgente, evento.Tb_ServiciosProgramado.Tb_ItinerarioViajero.agente_ID.ToString());
            Util.SelectItemDropDownList(cboEstado, evento.estadoEvento_ID.ToString());
            //txtObservacion.Text=even
            //txtProgramacion.Text = evento.Tb_ServiciosProgramado.pr
            
        }
        public void nuevoEvento()
        {
            limpiarCampos();
            if (this.CodigoProgramacion == 0)
                throw new Exception("El codigo de programación no ha sido asignado");
            Tb_ServiciosProgramado programacion = operacionesServices.getProgramacionByCodigo(this.CodigoProgramacion);
            txtCodigoEvento.Text = "0";
            txtFechaEvento.Text = DateTime.Now.ToShortDateString();
            txtHoraEvento.Text = DateTime.Now.ToShortTimeString();
            txtItinerario.Text = programacion.Tb_ItinerarioViajero.descripcion;
            txtProgramacion.Text = programacion.descripcion;
            Util.SelectItemDropDownList(cboAgencia, programacion.Tb_ItinerarioViajero.agencia_ID.ToString());
            Util.SelectItemDropDownList(cboAgente, this.User.UserID.ToString());
            Util.SelectItemDropDownList(cboEstado, AppStatic.VAR_OPE_ESTADO_ITINERARIO_PENDIENTE.ToString());

         }

        private void limpiarCampos()
        {
            txtFechaEvento.Text = String.Empty;
            txtHoraEvento.Text = String.Empty;
            txtItinerario.Text = String.Empty;
            txtObservacion.Text = String.Empty;
            txtProgramacion.Text = String.Empty;
            cboAgencia.SelectedIndex = -1;
            cboAgente.SelectedIndex = -1;
            cboEstado.SelectedIndex = -1;

        }

        private Tb_Evento getEvento()
        {
            Tb_Evento evento = null;
            try
            {
                evento = new Tb_Evento();
                evento.descripcion = txtObservacion.Text.Trim();
                evento.estadoEvento_ID = (cboEstado.SelectedValue == String.Empty) ? 0 : int.Parse(cboEstado.SelectedValue);
                evento.evento_ID = (txtCodigoEvento.Text == String.Empty) ? 0 : int.Parse(txtCodigoEvento.Text);
                evento.fechaEvento = DateTime.Parse(txtFechaEvento.Text + " " + txtHoraEvento.Text);
                evento.hora = txtHoraEvento.Text;
                evento.observacion = txtObservacion.Text.Trim();
                evento.programacion_ID = this.CodigoProgramacion;
                evento.agencia_ID = (cboAgencia.SelectedValue == String.Empty) ? 0 : int.Parse(cboAgencia.SelectedValue);
                evento.agente_ID = this.User.UserID;
                
            }
            catch (Exception exc)
            {
                ErrorControl(null, exc);
            }
            return evento;
        }

        #endregion

        #region Eventos de controles
        protected void btnSearch_Click(object sender, EventArgs e)
        {
            if (Page.IsValid)
            {
                try
                {
                    operacionesServices.updateEvento(getEvento());
                    this.MessageControl("Los datos han sido actualizados correctamente");
                    ProgramacionEventArgs e1 = new ProgramacionEventArgs();
                    e1.Programacion = CodigoProgramacion;
                    UpdateEvento_Click(btnSearch, e1);
                }
                catch (Exception exc)
                {
                    ErrorControl(btnSearch, exc);
                }
            }
        }
        #endregion


    }
}